package com.yuan.yblog.crud.service;

import com.yuan.yblog.crud.entity.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;

/**
* 服务类
* @author hepeiyuan
*/
public interface IUserService extends IService<User> {
    /**
    * 实体缓存key
    */
    String USER = "cache:entity:user:";

    /**
    * 缓存key有效期，单位：秒
    */
    Long USER_EXPIRE = 60 * 60 * 24L;

    /**
    * 锁key
    */
    String LOCK_USER = "cache:lock:user:";

    /**
    * 锁最长等待时间，单位：毫秒
    */
    Long LOCK_USER_WAIT = 500L;

    /**
    * 根据id查询实体，先查 Cache, 再查 DB
    * @param id 实体id
    * @return 实体对象
    */
    User selectByIdAndBuildCache(long id);

    /**
    * 插入新数据
    * @param insert 实体对象
    * @return 成功返回true
    */
    boolean insert(User insert);

    /**
    * 根据实体对象，直接更新
    * @param update 实体对象
    * @return 成功返回true
    */
    boolean updateAndDeleteCache(User update);

    /**
    * 根据条件构造器更新
    * @param updateWrapper 实体对象
    * @return 成功返回true
    */
    boolean updateAndDeleteCache(long id, UpdateWrapper<User> updateWrapper);

    /**
    * 逻辑删除
    * @param id 主键
    * @return 成功返回true
    */
    boolean logicalDeleteAndDeleteCache(long id, String logicalFiled);

    /**
    * 物理删除
    * @param id 主键
    * @return 成功返回true
    */
    boolean physicalDeleteAndDeleteCache(long id);
}
